package com.yeziji.common.business.dataMessage.service;

import com.mybatisflex.core.service.IService;
import com.yeziji.common.business.dataMessage.base.DataMessage;
import com.yeziji.common.business.dataMessage.entity.DataMessageRecordEntity;
import com.yeziji.constant.DataMessageTopicEnum;
import org.springframework.amqp.rabbit.connection.CorrelationData;

/**
 * 消息记录表 服务层。
 *
 * @author system
 * @since 2024-10-29
 */
public interface DataMessageRecordService extends IService<DataMessageRecordEntity> {
    /**
     * 发送同步到指定的主题
     *
     * @param topicEnum   主题枚举
     * @param dataMessage 同步数据
     */
    void syncTo(DataMessageTopicEnum topicEnum, DataMessage dataMessage);

    /**
     * rabbit mq 发送消息
     * @param exchangeKey 交换器
     * @param routeKey 路由键值
     * @param dataMessage 发送消息
     * @param correlationData 关联数据
     */
    void sendTo(String exchangeKey, String routeKey, final DataMessage dataMessage, CorrelationData correlationData);

    /**
     * 根据 flagId 获取消息记录
     * @param flagId 消息唯一标识
     */
    DataMessageRecordEntity getByFlagId(String flagId);

    /**
     * 重试异常的数据
     */
    void retryFailed();
}
